/*
 * Copyright (c) 2024 endless-sky
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef _HAL_ISP_H_
#define _HAL_ISP_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "hal_struct.h"

/**
 * @function:   Hal_VI_SensorMode
 * @brief:      设置Sensor模式
 * @param[in]:  HAL_U32 chan  视频输入通道号
 * @param[in]:  bool bPal    true表示PAL模式，false表示NTSC模式
 *
 * @return	 返回DSP_SUCCESS-成功，其它值		 失败，请参考错误码
 */
int32_t Hal_VI_SensorMode(uint32_t chan, bool bPal);

/**
 * @function:   Hal_ISP_SetScene
 * @brief:      设置场景模式
 * @param[in]:  HAL_U32 chan          视频输入通道号
 * @param[in]:  HAL_ISP_SCENE_E scene  场景模式
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetScene(uint32_t chan, HAL_ISP_SCENE_E scene);

/**
 * @function:   Hal_ISP_SetDNCfg
 * @brief:      设置日夜切换参数
 * @param[in]:  HAL_U32 chan           视频输入通道号
 * @param[in]:  HAL_ISP_DN_CFG_S *pCfg  日夜切换参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetDNCfg(uint32_t chan, HAL_ISP_DN_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_SetExpCfg
 * @brief:      设置曝光参数
 * @param[in]:  HAL_U32 chan            视频输入通道号
 * @param[in]:  HAL_ISP_EXP_CFG_S *pCfg  曝光参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetExpCfg(uint32_t chan, HAL_ISP_EXP_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_GetExpCfg
 * @brief:      获取曝光参数
 * @param[in]:  HAL_U32 chan            视频输入通道号
 * @param[out]: HAL_ISP_EXP_CFG_S *pCfg  曝光参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_GetExpCfg(uint32_t chan, HAL_ISP_EXP_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_SwitchAF
 * @brief:      开关抗闪烁功能
 * @param[in]:  HAL_U32 chan   视频输入通道号
 * @param[in]:  bool bEnable  true表示开，false表示关
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SwitchAF(uint32_t chan, bool bEnable);

/**
 * @function:   Hal_ISP_SetMeterCfg
 * @brief:      设置测光参数
 * @param[in]:  HAL_U32 chan              视频输入通道号
 * @param[in]:  HAL_ISP_METER_CFG_S *pCfg  测光参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetMeterCfg(uint32_t chan, HAL_ISP_METER_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_GetMeterCfg
 * @brief:      获取测光参数
 * @param[in]:  HAL_U32 chan              视频输入通道号
 * @param[out]: HAL_ISP_METER_CFG_S *pCfg  测光参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_GetMeterCfg(uint32_t chan, HAL_ISP_METER_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_SetColor
 * @brief:      设置图像颜色参数
 * @param[in]:  HAL_U32 chan              视频输入通道号
 * @param[in]:  HAL_ISP_COLOR_CFG_S *pCfg  颜色参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetColor(uint32_t chan, HAL_ISP_COLOR_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_GetColor
 * @brief:      获取图像颜色参数
 * @param[in]:  HAL_U32 chan              视频输入通道号
 * @param[out]: HAL_ISP_COLOR_CFG_S *pCfg  颜色参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_GetColor(uint32_t chan, HAL_ISP_COLOR_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_SetWBCfg
 * @brief:      设置白平衡参数
 * @param[in]:  HAL_U32 chan           视频输入通道号
 * @param[in]:  HAL_ISP_WB_CFG_S *pCfg  白平衡参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetWBCfg(uint32_t chan, HAL_ISP_WB_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_GetWBCfg
 * @brief:      获取白平衡参数
 * @param[in]:  HAL_U32 chan           视频输入通道号
 * @param[out]: HAL_ISP_WB_CFG_S *pCfg  白平衡参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_GetWBCfg(uint32_t chan, HAL_ISP_WB_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_SetDefogCfg
 * @brief:      设置去雾参数
 * @param[in]:  HAL_U32 chan              视频输入通道号
 * @param[in]:  HAL_ISP_DEFOG_CFG_S *pCfg  去雾参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetDefogCfg(uint32_t chan, HAL_ISP_DEFOG_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_GetDefogCfg
 * @brief:      获取去雾参数
 * @param[in]:  HAL_U32 chan              视频输入通道号
 * @param[out]: HAL_ISP_DEFOG_CFG_S *pCfg  去雾参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_GetDefogCfg(uint32_t chan, HAL_ISP_DEFOG_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_SetNoiseCfg
 * @brief:      设置降噪参数
 * @param[in]:  HAL_U32 chan              视频输入通道号
 * @param[in]:  HAL_ISP_NOISE_CFG_S *pCfg  降噪参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetNoiseCfg(uint32_t chan, HAL_ISP_NOISE_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_SetWdrCfg
 * @brief:      设置宽动态参数
 * @param[in]:  HAL_U32 chan            视频输入通道号
 * @param[in]:  HAL_ISP_WDR_CFG_S *pCfg  宽动态参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetWdrCfg(uint32_t chan, HAL_ISP_WDR_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_GetWdrCfg
 * @brief:      获取宽动态参数
 * @param[in]:  HAL_U32 chan            视频输入通道号
 * @param[in]:  HAL_ISP_WDR_CFG_S *pCfg  宽动态参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_GetWdrCfg(uint32_t chan, HAL_ISP_WDR_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_SetSupplyCfg
 * @brief:      设置补光参数
 * @param[in]:  HAL_U32 chan               视频输入通道号
 * @param[in]:  HAL_ISP_SUPPLY_CFG_S *pCfg  补光参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetSupplyCfg(uint32_t chan, HAL_ISP_SUPPLY_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_SetFECfg
 * @brief:      设置人脸曝光参数
 * @param[in]:  HAL_U32 chan           视频输入通道号
 * @param[in]:  HAL_ISP_FE_CFG_S *pCfg  人脸曝光参数
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetFECfg(uint32_t chan, HAL_ISP_FE_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_SetMFCfg
 * @brief:      设置mirror/flip
 * @param[in]:  HAL_U32 chan    视频输入通道号
 * @param[in]:  HAL_U8* pLuma  区域亮度
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_SetMFCfg(uint32_t chan, HAL_ISP_MF_CFG_S *pCfg);

/**
 * @function:   Hal_ISP_FaceExpLuma
 * @brief:      下发人脸曝光亮度
 * @param[in]:  HAL_U32 chan    视频输入通道号
 * @param[in]:  HAL_U32 num     区域数量
 * @param[in]:  HAL_U8* pLuma  区域亮度
 * @return 返回 HAL_SUCCESS 成功，其他值 失败
 */
int32_t Hal_ISP_FaceExpLuma(uint32_t chan, uint32_t num, uint8_t *pLuma);

#ifdef __cplusplus
}
#endif

#endif // _HAL_ISP_H_
